﻿using System.Collections.Generic;
using Neturion.Dados;
using Neturion.IRepositorios;
using Neturion.Repositorios;
using Neturion.Utils;

namespace Neturion.Negocios
{
    /// <summary>
    /// 
    /// </summary>
    public class NegocioCidade
    {
        private IRepositorioCidade _repositorioCidade;

        /// <summary>
        /// 
        /// </summary>
        public NegocioCidade()
        {
            _repositorioCidade = new RepositorioCidade();
        }

        /// <summary>
        /// 
        /// </summary>
        /// <param name="cidade"></param>
        /// <returns></returns>
        public Cidade Inserir(Cidade cidade)
        {
            cidade.Codigo = GeradorCodigo.GerarCodigo(1);
            cidade.Codigo += (_repositorioCidade.ObterUltimoIdCodigoInteiro() + 1).ToString();
            cidade.Codigo += GeradorCodigo.GerarCodigo(1, cidade.Codigo);
            return _repositorioCidade.Inserir(cidade);
        }

        /// <summary>
        /// 
        /// </summary>
        /// <param name="cidade"></param>
        /// <returns></returns>
        public Cidade Atualizar(Cidade cidade)
        {
            return _repositorioCidade.Atualizar(cidade);
        }

        /// <summary>
        /// 
        /// </summary>
        /// <param name="cidade"></param>
        public void Excluir(Cidade cidade)
        {
            Cidade cidadeTmp = ObterPorId(cidade.CidadeId);
            _repositorioCidade.Excluir(cidadeTmp);
        }

        /// <summary>
        /// 
        /// </summary>
        /// <returns></returns>
        public IList<Cidade> ObterTodos()
        {
            return _repositorioCidade.ObterTodos();
        }

        /// <summary>
        /// 
        /// </summary>
        /// <param name="id"></param>
        /// <returns></returns>
        public Cidade ObterPorId(int id)
        {
            return _repositorioCidade.ObterPorId(id);
        }

        /// <summary>
        /// 
        /// </summary>
        /// <param name="descricao"></param>
        /// <returns></returns>
        public IList<Cidade> ObterPorDescricao(string descricao)
        {
            return _repositorioCidade.ObterPorDescricao(descricao);
        }

        /// <summary>
        /// Obtem Todas as Ciades do Estado
        /// </summary>
        /// <param name="usuarioPermissao"></param>
        /// <param name="unidadeFederativa"></param>
        /// <returns></returns>
        public IList<Cidade> ObterTodasCidadesPorEstado(Usuario usuarioPermissao, UnidadeFederativa unidadeFederativa)
        {
            return _repositorioCidade.ObterTodasCidadesPorEstado(unidadeFederativa);
        }

        /// <summary>
        /// 
        /// </summary>
        /// <param name="codigo"></param>
        /// <returns></returns>
        public Cidade ObterPorCodigo(string codigo, Usuario usuarioPermissao)
        {
            return _repositorioCidade.ObterPorCodigo(codigo);
        }

        /// <summary>
        /// Procura pelo codigo igual ou pela descrição nas cidades do estado passado
        /// </summary>
        /// <param name="codigo"></param>
        /// <param name="unidadeFederativa"></param>
        /// <returns></returns>
        public IList<Cidade> ObterPorCodigoeEstado(string codigo, UnidadeFederativa unidadeFederativa, Usuario usuarioPermissao)
        {
            return _repositorioCidade.ObterPorCodigoeEstado(codigo, unidadeFederativa);
        }
    }
}